[Amazon FSx for NetApp ONTAP] SMBによる通信をする際にNetBIOS関連のポートを閉じても良いか確認してみた

[Amazon FSx for NetApp ONTAP] SMBによる通信をする際にNetBIOS関連のポートを閉じても良いか確認してみた

意図的にNetBIOSを使うことを意識する場合は除いて、閉じたままでも問題なさそう
Clock Icon2024.08.23

NetBIOS関連のポートは必要なのか気になる

こんにちは、のんピ(@non____97)です。

皆さんはAmazon FSx for NetApp ONTAP(以降FSxN)でNetBIOS関連のポートの解放は必要なのか気になったことはありますか? 私はあります。

AWS公式ドキュメントを見ると、FSxNでセキュリティグループのインバウンドルールに以下のようなNetBIOS関連のポートを開放するような書きっぷりがありました。

Protocol Ports Role
TCP 139 NetBIOS service session for CIFS
TCP 445 Microsoft SMB/CIFS over TCP with NetBIOS framing
UDP 137 NetBIOS name resolution for CIFS
UDP 139 NetBIOS service session for CIFS

参考 : NetBIOS service session for CIFS

では、このポートを開放するタイミングはいつでしょうか。

NetBIOSといえばWindowsですよね(IBM派もいるかも知れません)。WindowsといえばSMBです。

個人的にはSMBでNetBIOS関連のプロトコルを使用するシチュエーションとしては、「SMBのダイレクトホスティングをサポートしていない場合」と認識しています。

Microsoft公式ドキュメントにはNetBIOS関連のポートを閉じた場合のメリットが紹介されていました。

Windows では、TCP で直接ホストされている SMB プロトコルを使用して、ファイルとプリンターの共有トラフィックをサポートしています。 SMB 1.0 以前の CIFS トラフィックでは、TCP 経由の NetBIOS (NBT) プロトコルがサポートされましたが、Windows Vista および WINDOWS Server 2008 (SMB 2.0.2 以降) では、ポート 445 経由の TCP/IP が必要です。 NetBIOS トランスポートの削除には、次のようないくつかの利点があります。

  • SMB トラフィックの転送を簡略化します。
  • 名前解決の手段として WINS と NetBIOS ブロードキャストを削除する。
  • ファイルとプリンターの共有のための DNS での名前解決の標準化。
  • 攻撃方法としての安全性の低い NetBIOS プロトコルの削除

直接ホステッド インターフェイスと NBT インターフェイスの両方が有効になっている場合、両方のメソッドが同時に試行され、最初に応答が使用されます。 このメカニズムにより、SMB トラフィックの直接ホスティングをサポートしていないオペレーティング システムで Windows を適切に機能できます。

TCP/IP 経由のダイレクト ホスト サーバー メッセージ ブロック (SMB) - Windows Server | Microsoft Learn

ダイレクトホスティングSMBはWindows 2000以降はサポートされている認識です。そのため、接続クライアントがよっぽど古いOSやミドルウェアを使用していない限り、FSxNにおいてはNetBIOS関連のサポートは不要と考えております。

机上で評価するのも良くないと思うので、SMBで接続する場合、本当にNetBIOS関連のポートを閉じても良いのか確認してみます。

いきなりまとめ

  • 意図的にNetBIOSを使うことを意識する場合は除いて、以下NetBIOS関連のポートは閉じたままでも問題なさそう
    • TCP/139
    • UDP/137
    • UDP/139
  • Windows Server 2022から以下SMBバージョンでアクセスする際、TCP/445さえFSxNファイルシステムで開放していれば問題ない
    • SMB 3.1
    • SMB 3.0
    • SMB 2
    • SMB 1

やってみた

FSxNファイルシステムがLISTENしているポートの確認

まず、デプロイほやほやのFSxNファイルシステムがLISTENしているポートの確認を行います。

::> network connections listening show
Vserver Name     Interface Name:Local Port              Protocol/Service
---------------- -------------------------------------  -----------------------
Node: FsxId0e64a4f5386f74c87-01
svm              nfs_smb_management_1:40001             TCP/cifs-msrpc
svm              nfs_smb_management_1:135               TCP/cifs-msrpc
svm              nfs_smb_management_1:445               TCP/cifs-srv
svm              nfs_smb_management_1:139               TCP/cifs-srv
svm              nfs_smb_management_1:4049              UDP/rquota
svm              nfs_smb_management_1:111               TCP/port-map
svm              nfs_smb_management_1:111               UDP/port-map
svm              nfs_smb_management_1:4046              TCP/sm
svm              nfs_smb_management_1:4046              UDP/sm
svm              nfs_smb_management_1:4045              TCP/nlm-v4
svm              nfs_smb_management_1:4045              UDP/nlm-v4
svm              nfs_smb_management_1:2049              TCP/nfs
svm              nfs_smb_management_1:2049              UDP/nfs
svm              nfs_smb_management_1:635               TCP/mount
svm              nfs_smb_management_1:635               UDP/mount
15 entries were displayed.

NetBIOS関連で空いているポートは以下のとおりです。

  • TCP/139

UDP/137であるNetBIOSによる名前解決(NBNS)はLISTENしていないようです。

NetBIOS over TCP(NBT)が有効になっているのかと併せて確認します。

::> set diag

Warning: These diagnostic commands are for use by NetApp personnel only.
Do you want to continue? {y|n}: y

::*> cifs options show -fields is-netbios-over-tcp-enabled, is-nbns-enabled
vserver is-netbios-over-tcp-enabled is-nbns-enabled
------- --------------------------- ---------------
svm     true                        false

NBTは有効ですが、NBNSは無効になっていますね。

クライアントのNetBIOS over TCPの有効化状況

クライアントのNetBIOS over TCPの有効化状況を確認します。

> Get-WmiObject Win32_NetworkAdapterConfiguration | 
      Where-Object {$_.IPEnabled -eq $true} | 
      Select-Object Description, TcpipNetbiosOptions, @{Name="NetBIOSStatus";Expression={
            switch ($_.TcpipNetbiosOptions) {
                  0 {"DHCP"}
                  1 {"Enabled"}
                  2 {"Disabled"}
                  default {"Unknown"}
            }
      }
}

Description                    TcpipNetbiosOptions NetBIOSStatus
-----------                    ------------------- -------------
Amazon Elastic Network Adapter                   0 DHCP

DHCPによって配信される情報を使用するのがデフォルトのようです。

DHCPオプションセットは以下のとおりです。NetBIOS関連の設定はしていません。

9.DHCPオプションセット.png

セキュリティグループの設定

FSxNのセキュリティグループの設定をします。

セキュリティグループでは以下のようなNetBIOS関連のポートは開けないようにします。

Protocol Ports Role
TCP 139 NetBIOS service session for CIFS
UDP 137 NetBIOS name resolution for CIFS
UDP 139 NetBIOS service session for CIFS

実際のFSxNファイルシステムにアタッチしたセキュリティグループのルールは以下のとおりです。

1.FSxNのセキュリティグループ.png

SMBファイル共有の作成

SMBファイル共有の作成を行います。

ONTAP CLIでshareというファイル共有を作成します。

::*> cifs share create -share-name share -path /vol_ntfs

::*> cifs share show
Vserver        Share         Path              Properties Comment  ACL
-------------- ------------- ----------------- ---------- -------- -----------
svm            c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm            ipc$          /                 browsable  -        -
svm            share         /vol_ntfs         oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
3 entries were displayed.

エクスプローラーによるアクセス

この状態でエクスプローラーで作成したSMBサーバーにアクセスします。

2.エクスプローラーでSMB-SERVER.CORP.NON-97.NETにアクセス.png

作成したSMBファイル共有が表示されました。

SMBファイル共有にアクセスしてファイルやフォルダの作成ができることを確認します。

3.ファイルやフォルダの作成ができる.png

SMBファイル共有にアクセスしてファイルやフォルダの削除ができることも確認します。

4.ファイルやフォルダの削除ができる.png

特に操作に問題はなさそうですね。操作が遅延したりといった事象も感じませんでした。

ONTAP CLIでセッションを確認します。

::*> cifs session show

Node:    FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session                                        Open         Idle      Connection
ID         ID      Workstation      Windows User         Files         Time           Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824224 13794244183659118594                                      1m 48s               4
                   10.0.0.139       CORP\                    3
                                    Administrator

::*> cifs session show -instance

Vserver: svm

                            Node: FsxId0e64a4f5386f74c87-01
                      Session ID: 13794244183659118594
                   Connection ID: 1396824224
    Incoming Data LIF IP Address: 10.0.8.246
          Workstation IP Address: 10.0.0.139
        Authentication Mechanism: Kerberos
           User Authenticated as: domain-user
                    Windows User: CORP\Administrator
                       UNIX User: root
                     Open Shares: 2
                      Open Files: 3
                      Open Other: 0
                  Connected Time: 2h 24m 39s
                       Idle Time: 1m 53s
                Protocol Version: SMB3_1
          Continuously Available: No
               Is Session Signed: false
                    NetBIOS Name: -
           SMB Encryption Status: unencrypted
               Large MTU Enabled: true
                Connection Count: 4
                   Active Shares: c$, share

SMB 3.1でアクセスしているようですね。

PowerShellによるアクセス

PowerShellによるアクセスも試しましょう。

> New-PSDrive -Name "Z" -PSProvider FileSystem -Root "\\SMB-SERVER.corp.non-97.net\share" -Persist

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
Z                   0.00         15.20 FileSystem    \\SMB-SERVER.corp.non-97.net\share


> ls Z:\
> echo test > Z:\test.txt
> ls Z:\


    Directory: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         8/23/2024   3:57 AM             14 test.txt

問題なく読み書きできていますね。

パケットキャプチャを眺める

エクスプローラーでアクセスする際の通信をパケットキャプチャして、WireSharkで眺めます。

10.SMB31の場合.png

NetBIOS関連のポートに通信しようとしている形式はありませんでした。

ちなみにNegotiate Protocol Requestを確認すると、SMBクライアントからサポートしているSMBバージョンをリクエストしていました。

5.SMB31の場合のリクエスト.png

そのレスポンスであるNegotiate Protocol Responseを確認すると、SMB 3.1.1を使用することになったことが分かります。

6.レスポンスがSMB3.1.1.png

SMB 3.0のアクセス

他のSMBバージョンだとどうでしょうか。

SMB 3.0から確認します。

ONTAP CLIでSMB 3.1を無効化します。

::*> cifs options show -fields smb1-enabled, smb2-enabled, smb3-enabled, smb31-enabled
vserver smb1-enabled smb2-enabled smb3-enabled smb31-enabled
------- ------------ ------------ ------------ -------------
svm     false        true         true         true

::*> cifs options modify -smb31-enabled false

Warning: Disabling the SMB 3.1 protocol will disconnect all SMB 3.1 clients.
Do you want to continue? {y|n}: y

::*> cifs options show -fields smb1-enabled, smb2-enabled, smb3-enabled, smb31-enabled
vserver smb1-enabled smb2-enabled smb3-enabled smb31-enabled
------- ------------ ------------ ------------ -------------
svm     false        true         true         false

::*> cifs session show
This table is currently empty.

設定変更をするとSMB 3.1で接続していたセッションが切断されました。

この状態でエクスプローラーを使って接続しました。特に問題なく接続できました。

パケットキャプチャの結果は以下のとおりです。

11.SMB30のアクセス.png

特にNetBIOS関連のポートにはアクセスしていないことが分かります。

また、SMB 3.0で通信していることも分かりますね。

ONTAP CLIからでも接続しているSMBのバージョンを確認できました。

::*> cifs session show -instance

Vserver: svm

                            Node: FsxId0e64a4f5386f74c87-01
                      Session ID: 13794244183659118623
                   Connection ID: 1396824256
    Incoming Data LIF IP Address: 10.0.8.246
          Workstation IP Address: 10.0.0.139
        Authentication Mechanism: Kerberos
           User Authenticated as: domain-user
                    Windows User: CORP\Administrator
                       UNIX User: root
                     Open Shares: 1
                      Open Files: 2
                      Open Other: 0
                  Connected Time: 11s
                       Idle Time: 11s
                Protocol Version: SMB3
          Continuously Available: No
               Is Session Signed: false
                    NetBIOS Name: -
           SMB Encryption Status: unencrypted
               Large MTU Enabled: true
                Connection Count: 1
                   Active Shares: share

SMB 2のアクセス

続いてSMB 2です。

ONTAP CLIでSMB 3.0を無効化します。

::*> cifs options modify -smb3-enabled false

Warning: Disabling the SMB 3.0 protocol will disconnect all SMB 3.0 and SMB 3.1 clients.
Do you want to continue? {y|n}: y

Warning:
         When SMB 3.0 was disabled for Vserver "svm", the SMB 3.1 and copy offload and multichannel features were also disabled. If you re-enable SMB 3.0 and want to enable these features, specify "-smb31-enabled true -copy-offload-enabled true
         -is-multichannel-enabled true" with "-smb3-enabled true".

::*> cifs options show -fields smb1-enabled, smb2-enabled, smb3-enabled, smb31-enabled
vserver smb1-enabled smb2-enabled smb3-enabled smb31-enabled
------- ------------ ------------ ------------ -------------
svm     false        true         false        false


::*> cifs session show -instance
There are no entries matching your query.

この状態でエクスプローラーを使って接続しました。特に問題なく接続できました。

パケットキャプチャの結果は以下のとおりです。

12.SMB2のアクセス.png

特にNetBIOS関連のポートにはアクセスしていないことが分かります。

また、SMB 2.1で通信していることも分かりますね。

ONTAP CLIからでも接続しているSMBのバージョンを確認できました。

::*> cifs session show -instance

Vserver: svm

                            Node: FsxId0e64a4f5386f74c87-01
                      Session ID: 13794244183659118624
                   Connection ID: 1396824257
    Incoming Data LIF IP Address: 10.0.8.246
          Workstation IP Address: 10.0.0.139
        Authentication Mechanism: Kerberos
           User Authenticated as: domain-user
                    Windows User: CORP\Administrator
                       UNIX User: root
                     Open Shares: 1
                      Open Files: 3
                      Open Other: 0
                  Connected Time: 13m 13s
                       Idle Time: 13m 13s
                Protocol Version: SMB2_1
          Continuously Available: No
               Is Session Signed: false
                    NetBIOS Name: -
           SMB Encryption Status: unencrypted
               Large MTU Enabled: true
                Connection Count: 1
                   Active Shares: share

SMB 1のアクセス

SMB 1でも試します。

ONTAP CLIでSMB 2の無効化とSMB 1の有効化を行います。

::*> cifs options modify -smb2-enabled false -smb1-enabled true

Warning: SMB1 protocol version is obsolete and considered insecure. Therefore, the "smb1-enabled" parameter is deprecated. This parameter might be removed in a future release.
Do you want to continue? {y|n}: y

Warning: Disabling the SMB 2.0 protocol will disconnect all SMB 2.0, SMB 3.0 and SMB 3.1 clients.
Do you want to continue? {y|n}: y

Warning: When SMB 2.0 was disabled for Vserver "svm", the fake open feature was also disabled.  If you re-enable SMB 2.0 and want to enable fake open, specify "-is-fake-open-enabled true" with "-smb2-enabled true".
         When SMB 2.0 was disabled for Vserver "svm", the Large MTU feature was also disabled.  If you re-enable SMB 2.0 and want to enable Large MTU, specify "-is-large-mtu-enabled true" with "-smb2-enabled true".

::*> cifs options show -fields smb1-enabled, smb2-enabled, smb3-enabled, smb31-enabled
vserver smb1-enabled smb2-enabled smb3-enabled smb31-enabled
------- ------------ ------------ ------------ -------------
svm     true         false        false        false

::*> cifs session show -instance
There are no entries matching your query.

SMB 2を無効化する場合、Large MTUなど他オプションも無効にされるようです。

この状態でエクスプローラーを使って接続しようとすると、接続エラーになりました。

パケットキャプチャの結果は以下のとおりです。

13.SMB1でアクセスしようとした場合.png

ProtocolからSMB2の通信をしようとしていないことが分かりますね。

接続に失敗したのはクライアントがSMB 1をサポートしていないためです。

役割と機能からSMB 1のClientのインストールを行います。

7.SMB1のClientのインストール.png

OSの再起動を要求されるので再起動します。

8.再起動を要求される.png

再起動完了後、エクスプローラーを使って接続します。今回は特に問題なく接続できました。

パケットキャプチャの結果は以下のとおりです。

14.SMB1でアクセスしようとした場合_成功.png

特にNetBIOS関連のポートにはアクセスしていないことが分かります。

ONTAP CLIからでも接続しているSMBのバージョンを確認すると、確かにSMB 1でアクセスしていました。

::*> cifs session show -instance

Vserver: svm

                            Node: FsxId0e64a4f5386f74c87-01
                      Session ID: 1
                   Connection ID: 1396824268
    Incoming Data LIF IP Address: 10.0.8.246
          Workstation IP Address: 10.0.0.139
        Authentication Mechanism: Kerberos
           User Authenticated as: domain-user
                    Windows User: CORP\Administrator
                       UNIX User: root
                     Open Shares: 1
                      Open Files: 2
                      Open Other: 0
                  Connected Time: 23s
                       Idle Time: 13s
                Protocol Version: SMB1
          Continuously Available: No
               Is Session Signed: false
                    NetBIOS Name: -
           SMB Encryption Status: unencrypted
               Large MTU Enabled: false
                Connection Count: 1
                   Active Shares: share

意図的にNetBIOSを使うことを意識する場合は除いて、閉じたままでも問題なさそう

Amazon FSx for NetApp ONTAPにおいて、SMBによる通信をする際にNetBIOS関連のポートを閉じても良いか確認してみました。

結論、閉じたままでも問題なさそうです。

そもそもNetApp公式ドキュメントを確認すると、セキュリティグループのインバウンドルールとして設定するポートにはNetBIOS関連のポートであるUDP/137、UDP/139は記載されていませんでした。

https://docs.netapp.com/us-en/bluexp-fsx-ontap/requirements/reference-security-groups-fsx.html#inbound-rules

また、同じくSMBサーバーの機能を持つFSx for Windows File Serverが使用するポート一覧を確認すると、NetBIOS関連のものはありませんでした。

15.Windows-port-requirements.png

抜粋 : Amazon VPC を使用したファイルシステムアクセスコントロール - Amazon FSx for Windows File Server

このことから意図的にNetBIOSを使うことを意識する場合は除いて、閉じたままでも問題なさそうであることが分かります。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!

おまけ : SMB設定を元に戻す

SMB 1を使用するにあたって変更したSMBの設定を戻す方法は以下のとおりです。簡単です。

::*> cifs options show -fields smb1-enabled, smb2-enabled, smb3-enabled, smb31-enabled, is-fake-open-enabled, is-large-mtu-enabled, copy-offload-enabled
vserver smb1-enabled smb2-enabled smb3-enabled smb31-enabled copy-offload-enabled is-fake-open-enabled is-large-mtu-enabled
------- ------------ ------------ ------------ ------------- -------------------- -------------------- --------------------
svm     true         false        false        false         false                false                false


::*> cifs options modify -smb1-enabled false -smb2-enabled true -smb3-enabled true -smb31-enabled true -is-fake-open-enabled true -is-large-mtu-enabled true -copy-offload-enabled true

Warning: Disabling the SMB1 protocol will disconnect all SMB1 clients.
Do you want to continue? {y|n}: y

Warning: Enabling CIFS Large MTU may cause performance degradation for clients not using Large MTU.
Do you want to continue? {y|n}: y

::*> cifs options show -fields smb1-enabled, smb2-enabled, smb3-enabled, smb31-enabled, is-fake-open-enabled, is-large-mtu-enabled, copy-offload-enabled
vserver smb1-enabled smb2-enabled smb3-enabled smb31-enabled copy-offload-enabled is-fake-open-enabled is-large-mtu-enabled
------- ------------ ------------ ------------ ------------- -------------------- -------------------- --------------------
svm     false        true         true         true          true                 true                 true

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.